// 导入morgan日志中间件，用于记录HTTP请求信息
const morgan = require("morgan");

/**
 * 开发环境日志格式
 * 包含：请求方法、请求URL、响应状态码、响应时间、响应内容长度
 * 格式简洁，便于开发调试
 */
const devFormat =
  ":method :url :status :response-time ms - :res[content-length]";

/**
 * 生产环境日志格式
 * 包含：ISO格式时间、请求方法、URL、HTTP版本、状态码、
 * 响应长度、来源页、用户代理信息
 * 格式符合标准日志规范，便于生产环境分析和监控
 */
const prodFormat =
  '[:date[iso]] ":method :url HTTP/:http-version" :status :res[content-length] ":referrer" ":user-agent"';

/**
 * 根据环境配置并应用morgan日志中间件
 * @param {Object} app - Express应用实例
 */
module.exports = (app) => {
  // 开发环境：使用简洁格式，记录所有请求
  if (process.env.NODE_ENV === "development") {
    app.use(morgan(devFormat));
  } else {
    // 生产环境：使用标准格式，仅记录错误请求（状态码>=400）
    app.use(
      morgan(prodFormat, {
        // 跳过状态码小于400的请求（只记录错误相关请求）
        skip: (req, res) => res.statusCode < 400,
      })
    );
  }
};
